home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / UTIL / MEMORY / OLD / MEM208SRC / !Memphis / s / protect < prev    next >
Text File  |  1993-08-12  |  3KB  |  92 lines

  1. ; > s.protect
  2. ;
  3. ; Description   ObjAsm source code for snew/sload filters for MemFSFiler
  4. ; Author        Darren Durbin & Nick Smith
  5. ; Version       0.01
  6. ; Date          12th August 1993
  7. ; Copyright     (c) Darren Durbin & Nick Smith, 1993
  8.  
  9. ; *** Assembler directives
  10.  
  11.         GET     hdr.regs                ; GET register definitions
  12.         GET     hdr.swis
  13.  
  14. ; Area name C$$code advisable as wanted to link with C output
  15.  
  16.         AREA |C$$code|, CODE, READONLY
  17.  
  18.         EXPORT  |protect_code|
  19.  
  20. ; The following bytes contain the name of the following procedure to
  21. ; make stack backtracing work, eg. when an address exception occurs!
  22.  
  23.         =       "protect_code", 0       ; Align
  24.         ALIGN
  25.         DCD     &ff000010
  26.  
  27. |protect_code|
  28.         CMP     r0,#&ff
  29.         MOVGTS  pc,r14                  ; Ensure system area is being used.
  30.         CMP     r0,#10                  ; If *sload is used then change
  31.         MOVEQ   r0,#11                  ; it into a *smerge
  32.         CMP     r0,#9                   ; If *snew is run then use
  33.         BEQ     MySnew                  ; the 'safe' version.
  34.         MOVS    pc,r14                  ; Otherwise, carry on...
  35.  
  36. MySnew
  37.         STMFD   r13!,{r0-r12}
  38.         MOV     r0,#8
  39.         MOV     r1,#0
  40.         SWI     OS_SpriteOp             ; Get number of sprites in area
  41.         MOV     r6,r3
  42.         MOV     r0,#13
  43.         ADR     r2,buff
  44.         MOV     r4,#1
  45. SearchForNames
  46.         MOV     r0,#13
  47.         MOV     r3,#&ff
  48.         SWI     OS_SpriteOp             ; Get sprite name
  49.         ADR     r0,str1
  50.         BL      CheckNames              ; Check if OK to delete
  51.         MOV     r7,r5
  52.         ADR     r0,str2                 ; and again...
  53.         BL      CheckNames
  54.         ADD     r5,r7,r5
  55.         CMP     r5,#1
  56.         ADDEQ   r4,r4,#1                ; MOVe to next sprite     
  57.         BEQ     NoDelete
  58.         MOV     r0,#25
  59.         SWI     OS_SpriteOp             ; Delete the sprite.
  60. NoDelete
  61.         SUBS    r6,r6,#1
  62.         BNE     SearchForNames
  63.         LDMFD   r13!,{r0-r12,r15}
  64.  
  65. CheckNames
  66.         STMFD   r13!,{r0-r4,r14}
  67.         ADR     r1,buff
  68.         MOV     r5,#1                           ; Assume they are the same
  69. CheckLoop
  70.         LDRB    r2,[r0],#1
  71.         LDRB    r3,[r1],#1
  72.         CMP     r2,#0
  73.         BEQ     ExitLoop
  74.         CMP     r3,#0                           ; Check if at the end.
  75.         MOVEQ   r5,#0                           ; Set to "not same"        
  76.         BEQ     ExitLoop                        ; if so, exit
  77.         CMP     r2,r3                           ; Check if letters are the same
  78.         BEQ     CheckLoop
  79.         MOV     r5,#0
  80. ExitLoop
  81.         LDMFD   r13!,{r0-r4,r15}
  82.  
  83. str1    =       "sparkfs", 0
  84. str2    =       "mfs", 0
  85.  
  86. buff    DCD     0
  87.         DCD     0
  88.         DCD     0
  89.         DCD     0
  90.  
  91.         END
  92.